---
title: lefthook
description: Führen Sie Ultracite automatisch für Ihre zum Commit vorgemerkten Git-Dateien mit lefthook aus
---

Ultracite bietet nahtlose Integration mit [lefthook](https://lefthook.dev/), einem schnellen und leistungsstarken Git-Hooks-Manager. Diese Integration richtet automatisch Pre-Commit-Hooks ein, um sicherzustellen, dass Ihr Code vor jedem Commit richtig formatiert ist.

## Was ist lefthook?

lefthook ist ein schneller nativer Git-Hooks-Manager für Node.js- und Go-Projekte. Er ist darauf ausgelegt, einfach, schnell und leistungsfähig zu sein und ermöglicht es Ihnen, Git-Hooks in Ihrem Team mit Konfigurationsdateien zu verwalten, die in Ihr Repository committet werden können.

## Wie Ultracite lefthook verwendet

Wenn Sie Ultracite in Ihrem Projekt initialisieren, kann es lefthook automatisch so konfigurieren, dass die Code-Formatierung vor jedem Commit ausgeführt wird. Dadurch wird sichergestellt, dass:

- Alles committeter Code konsistenten Formatierungsstandards folgt
- Code-Qualitätsprüfungen automatisch durchgesetzt werden
- Teammitglieder sich nicht daran erinnern müssen, Code manuell zu formatieren
- Ihr Repository einen sauberen, konsistenten Code-Stil beibehält

## Verhalten des Pre-Commit-Hooks

Die lefthook-Integration von Ultracite erstellt einen Pre-Commit-Hook, der den folgenden Befehl ausführt:

```bash
npx ultracite fix
```

Dieser Befehl:
- Führt den Linter und Formatter von Biome auf Ihrem Codebestand aus
- Behebt Formatierungsprobleme automatisch, soweit möglich
- Stellt sicher, dass alle gestagten Dateien den Code-Standards Ihres Projekts entsprechen
- Verhindert Commits, die Formatierungsinkonsistenzen einführen würden

## Automatische Einrichtung

Während des Initialisierungsprozesses (`ultracite init`), wenn Sie die lefthook-Option auswählen, führt Ultracite folgende Schritte aus:

1. **Installiert lefthook**: Fügt lefthook als Entwicklungsabhängigkeit zu Ihrem Projekt hinzu  
2. **Initialisiert lefthook**: Führt `lefthook install` aus, um Git-Hooks einzurichten  
3. **Erstellt die Konfiguration**: Legt die `lefthook.yml`-Datei mit dem Formatierungsbefehl an  
4. **Behandelt bestehende Setups**: Wenn Sie lefthook bereits konfiguriert haben, aktualisiert es Ihre bestehende Konfiguration, anstatt sie zu überschreiben

## Integrationsdetails

Die lefthook-Integration enthält mehrere intelligente Funktionen:

### Abhängigkeitsverwaltung
- Installiert lefthook automatisch als Dev-Abhängigkeit mit dem Paketmanager Ihres Projekts  
- Verwendet den passenden Paketmanager-Befehl (`npm install -D`, `yarn add -D`, `pnpm add -D`, etc.)  
- Führt `lefthook install` aus, um Git-Hooks zu initialisieren

### Konfigurationsverwaltung
- **Neue Projekte**: Erstellt eine neue `lefthook.yml`-Datei mit dem ultracite fix-Befehl  
- **Bestehende Projekte**: Fügt den Ultracite-Befehl zu Ihrer vorhandenen lefthook-Konfiguration hinzu und bewahrt andere eventuell konfigurierte Hooks

### Dateistruktur
Die Integration erstellt oder ändert:
```
lefthook.yml    # Contains the formatting command configuration
```

## Vorteile

- **Team-Konsistenz**: Bei jedem Teammitglied wird dieselbe Formatierung automatisch angewendet  
- **Keine Konfiguration**: Funktioniert sofort mit sinnvollen Standardeinstellungen  
- **Hohe Leistung**: lefthook ist in Go geschrieben und sehr schnell  
- **Flexibilität**: Leicht mit zusätzlichen Befehlen und Hooks erweiterbar  
- **Plattformübergreifend**: Funktioniert konsistent auf verschiedenen Betriebssystemen

## Integration in den Workflow

Die lefthook-Integration fügt sich nahtlos in Ihren Entwicklungsworkflow ein:

1. **Entwickler nimmt Änderungen vor** an Code-Dateien  
2. **Stagt Dateien** für den Commit mit `git add`  
3. **Versucht zu committen** mit `git commit`  
4. **lefthook löst** automatisch den Pre-Commit-Hook aus  
5. **Ultracite wird ausgeführt** und formatiert die gestagten Dateien  
6. **Der Commit wird fortgesetzt**, wenn die Formatierung erfolgreich war, oder **schlägt fehl**, wenn Probleme nicht automatisch behoben werden konnten

## Anpassung

Während Ultracite sinnvolle Standardwerte setzt, können Sie das Verhalten anpassen:

- Ändern Sie `lefthook.yml`, um zusätzliche Befehle oder Hooks hinzuzufügen  
- Konfigurieren Sie Biome-Einstellungen, um Formatierungsregeln anzupassen  
- Fügen Sie neben der Formatierung von Ultracite weitere Pre-Commit-Prüfungen hinzu  
- Nutzen Sie lefthooks leistungsfähige parallele Ausführungs- und Bedingungslogikfunktionen

## Fehlerbehebung

### Hook wird nicht ausgeführt
Wenn der Pre-Commit-Hook nicht ausgeführt wird:
- Stellen Sie sicher, dass lefthook installiert ist: `npm ls lefthook`  
- Prüfen Sie, ob `lefthook.yml` vorhanden ist und den ultracite-Befehl enthält  
- Verifizieren Sie, dass Git-Hooks in Ihrem Repository aktiviert sind  
- Führen Sie `lefthook install` aus, um die Hooks erneut zu installieren

### Berechtigungsprobleme
lefthook verwaltet Git-Hook-Berechtigungen automatisch, aber wenn Sie auf Probleme stoßen:
- Versuchen Sie erneut, `lefthook install` auszuführen  
- Überprüfen Sie, ob Ihre Git-Konfiguration Hooks zulässt

### Hooks umgehen
In seltenen Fällen, in denen Sie den Pre-Commit-Hook überspringen müssen:
```bash
git commit --no-verify
```

Verwenden Sie dies sparsam, da dadurch die automatisierte Formatierung umgangen wird, die Ihren Codebestand konsistent hält.

## Konfigurationsbeispiel

Here's what the `lefthook.yml` configuration looks like:

```yaml
pre-commit:
  jobs:
    - run: npx ultracite fix
      glob: 
        - "*.js"
        - "*.jsx"
        - "*.ts"
        - "*.tsx"
        - "*.json"
        - "*.jsonc"
        - "*.css"
      stage_fixed: true
```

Diese Konfiguration:
- Führt nur bei JavaScript-, TypeScript-, JSON- und CSS-Dateien aus  
- Stagt automatisch alle Dateien, die vom Formatter behoben wurden  
- Verwendet die effiziente `jobs`-Syntax für bessere Performance

Sie können diese Konfiguration erweitern, um zusätzliche Jobs einzuschließen:

```yaml
pre-commit:
  jobs:
    - run: npx ultracite fix
      glob: 
        - "*.js"
        - "*.jsx"
        - "*.ts"
        - "*.tsx"
        - "*.json"
        - "*.jsonc"
        - "*.css"
      stage_fixed: true
    - run: npm test
      glob: "*.{js,ts}"
    - run: tsc --noEmit
      glob: "*.{ts,tsx}"
```